﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//memset函数的使用
//memset是⽤来设置内存的，将内存中的值以字节为单位设置成想要的内容
//void* memset(void* ptr,int value,size_t num)
//ptr是 指向要填充要设置的内存块
//value是 要设置的值
//num个字节的内容要被设置的
//把ptr指向的内存块存储num个字节的value值
//int main()
//{
//	char arr[] = "hello world";
//	memset(arr, 'x', 5);
//	
//	printf("%s\n", arr);//xxxxx world
//
//	//memset(arr+2, 'y', 5);xxyyyyyorld
//	return 0;
//}

//int main()
//{
//	int arr[5] = { 0 };
//	memset(arr, 1, 20);//err 以字节为单位设置的 这样写会把每个字节设置为1 并不是每个元素设置为1
//	//但是如果把每个字节改为0倒是可以的
//	int arr2[] = { 1,2,3,4,5 };
//	memset(arr2, 0, 20);
//	//这样得到的就是每个元素都是0了
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}

//memcmp函数的使用
//int memcmp(const void* ptr1,const void* ptr2,size_t num)	
//⽐较从ptr1和ptr2指针指向的位置开始，向后的num个字节的内容 如果在num之前比较出大小了 就不需要往后继续比较了
//返回值 ptr1 > ptr2 返回大于0的数字
//		 ptr1 < ptr2 返回小于0的数字
//       ptr1 = ptr2 返回等于0的数字
//int main()
//{
//	int arr1[] = { 1,2,3,4,5,6,7 };
//	int arr2[] = { 1,2,3,4,8,8,8 };
//	int ret = memcmp(arr1, arr2, 16);
//	printf("%d\n", ret);
//	return 0;
//}

//数据在内存中的存储
//整数在内存中的存储  是以二进制的形式存储的 二进制的表示：原码、反码、补码  内存中存储的是补码
//int main()
//{
//	int n = 0x11223344;
//	//1.整数在内存中存储的是二进制的补码
//	//2.在调试窗口中观察内存的时候，为了方便展示，显示的是16进制的值
//	// 3.存储的顺序是倒过来的！
//	return 0;
//
//}
//大小端内存存储的问题
//0x11223344 地址由低到高
//在内存中存放的顺序是 11 22 33 44 大端字节序存储
// 大端字节序存储-- 把一个数据的低位字节的内容放在高地址处 把高位字节的内容放在低地址处 
// 小端字节序存储 --把一个数据的低位自己的内容存储到低地址处 把高位字节的内容存储到高地址处 
// 44 33 22 11 小端字节序存储 

//设计一个小程序来判断当前机器的字节序
//int main()
//{
//	//想方设法地拿一个字节
//	//不能直接强制类型转换 需要取地址再进行强转
//	int n = 1;
//	if (*(char*)&n == 1)
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("大端\n");
//	}
//	//0x00 00 00 01
//	//小端存储是 01 00 00 00
//	//大端存储是 00 00 00 01
//	return 0;
//}
//如果要封装成一个函数呢？
int check_sys()
{
	int n = 1;
	if (*(char*)&n == 1)
	{
		return 1;//小端
	}
	else
	{
		return 0;//大端
	}
	//或者是直接return *(char*)&n;
}
int main()
{
	int ret = check_sys();
	if (ret == 1)
	{
		printf("小端\n");

	}
	else
	{
		printf("大端\n");
	}
	return 0;
}